package com.tools.web.interceptor.limiting;

import com.tools.common.object.Note;
import com.tools.common.thread.Timeunit;

import java.lang.annotation.*;

/**
 * 限流注解，用于控制器上。限制请求次数
 * */
@Target({ElementType.TYPE, ElementType.METHOD})
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Note("限流注解，用于控制器上。限制请求次数")
public @interface RequestLimit {

    @Note("默认允许请求 1 次")
    int allow() default 1;

    @Note("上一次到下一次请求之间的时间间隔。默认是 2 秒允许请求 1 次")
    long time() default 2;

    @Note("time 的时间单位，默认是秒")
    Timeunit timeunit() default Timeunit.SECOND;

    @Note("最大允许请求次数，这个数必须大于等于 allow 的值，否则无效。" +
            "若请求次数在指定的时间内超过这个值，就尝试执行封号操作")
    int maxAllow() default 0;

    @Note("限流错误状态码")
    int code() default 0;

    @Note("限流错误信息")
    String msg() default "";

    @Note("禁用错误状态码")
    int dCode() default 0;

    @Note("禁用错误信息")
    String dMsg() default "";
}
